<?php
/**
 * @author Vitaly
 * Date: 09.05.12
 */

/*
 * Обрабатывает ajax-запросы
 */

class AjaxActionController extends ActionController
{

    // выполняется при каждом обращении к контроллеру
    // логинит юзера и добавляет во view его модель (удобно для отрисовки страницы)

    function before()
    {
        if(isSet($_SESSION['userid']))
        {
            $userMapper = new UserMapper();
            $this->view->user = $userMapper->find($_SESSION['userid']);
        }
    }

    function action()
    {
        header('Location: /');
    }

    // поднимает рейтинг пользователя "user"
    // проверяет голосующего и время его последнего голосования

    function upRating()
    {
        if(!empty($this->args['user']) && ($_SESSION['userid'] != $this->args['user']))
        {
            $userMapper = new UserMapper();
            echo ($userMapper->upRating($this->args['user'])) ? "OK" : "TIME";
        }
        else echo "ERROR";
    }

    // по входящему массиву users (все юзеры страницы)
    // выдает строку с рейтингом каждого юзера соответственно

    function getAllRatings()
    {
        if(!empty($this->args['users']))
        {
            $userMapper = new UserMapper();
            if(is_array($this->args['users']))
            {
                foreach($this->args['users'] as $userid)
                {
                    $userRatings[] = $userMapper->find($userid)->getRating();
                }
                echo implode(', ', $userRatings);
                return;
            }
        }
        echo 'ajax request error';
    }

    function getMessages()
    {
        if(empty($this->args['ll']) || empty($this->args['rl']))
        {
            echo "ajaxDataError";
            return;
        }

        $msgMapper = new MessageMapper();
        $commentMapper = new CommentMapper();
        $userMapper = new UserMapper();
        $tagMapper = new TagMapper();

        // выбор показываемых сообщений
        // можно отфильтровать по id тега "tag" или id автора "author"

        if(!empty($this->args['author']))
        {
            $allMessages = $msgMapper->getMessagesByAuthor((int)$this->args['author'], (int)$this->args['ll'], (int)$this->args['rl']);
        }
        elseif(!empty($this->args['tag']))
        {
            $allMessages = $msgMapper->getMessagesByTag((int)$this->args['tag'], (int)$this->args['ll'], (int)$this->args['rl']);
        }
        else
        {
            $allMessages = $msgMapper->select((int)$this->args['ll'], (int)$this->args['rl']);
        }

        // заполняем массив $allMessages всеми данными, которые могут потребоваться для вывода во view

        foreach($allMessages as &$message)
        {
            $message['author'] = $userMapper->findArray($message['author']);
            $message['comments'] = $commentMapper->getCommentsArray($message['id']);
            $message['tags'] = $tagMapper->getTagsArray($message['id']);
        }

        $this->view->posts = $allMessages;

        $this->view->setStructure('ajaxGetMessages', 'empty', 'empty');
        $this->view->draw();
    }
}
